package club.service.impl;

import club.dao.BlogMapper;
import club.pojo.Blog;
import club.service.BlogService;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
@Transactional
public class BlogServiceImpl implements BlogService {
    @Resource
    private BlogMapper blogMapper; // 注入博客数据访问层

    /**
     * 分页查询博客（支持按活动时间筛选）
     * @param actionTime 活动时间（格式：yyyy-MM-dd，可选）
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 分页结果对象，包含博客列表及分页信息
     */
    @Override
    public PageInfo<Blog> findAllBlog(String actionTime, Integer pageNum, Integer pageSize) {
        // 1. 开启分页功能
        PageHelper.startPage(pageNum, pageSize);

        // 2. 构建查询条件
        EntityWrapper<Blog> wrapper = new EntityWrapper<>();
        if (actionTime != null && !"".equals(actionTime)) {
            wrapper.eq("actionTime", actionTime);
            // 添加活动时间条件
        }

        // 3. 执行查询
        List<Blog> list = blogMapper.selectList(wrapper);

        // 4. 封装分页结果
        PageInfo<Blog> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }

    /**
     * 添加新博客
     * @param blog 博客对象
     * @return 插入成功返回1，失败返回0
     */
    @Override
    public int add(Blog blog) {
        return blogMapper.insert(blog);
        // 调用Mapper插入博客记录
    }

    /**
     * 根据ID查询博客
     * @param id 博客ID
     * @return 博客对象，不存在则返回null
     */
    @Override
    public Blog findById(Integer id) {
        return blogMapper.selectById(id);
        // 调用Mapper根据ID查询博客
    }

    /**
     * 更新博客信息
     * @param blog 包含更新字段的博客对象（需包含ID）
     * @return 更新成功返回1，失败返回0
     */
    @Override
    public int updateBlog(Blog blog) {
        return blogMapper.updateById(blog);
        // 调用Mapper根据ID更新博客记录
    }

    /**
     * 根据ID删除博客
     * @param id 博客ID
     * @return 删除成功返回1，失败返回0
     */
    @Override
    public int del(Integer id) {
        return blogMapper.deleteById(id);
        // 调用Mapper根据ID删除博客记录
    }

    /**
     * 分页查询所有博客
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 分页结果对象，包含博客列表及分页信息，每页显示3条记录
     */
    @Override
    public PageInfo<Blog> blogs(Integer pageNum, Integer pageSize) {
        // 1. 开启分页功能
        PageHelper.startPage(pageNum, pageSize);

        // 2. 查询所有博客（不添加任何条件）
        List<Blog> blogs = blogMapper.selectList(null);

        // 3. 封装分页结果，设置导航页码数为3
        PageInfo<Blog> pageInfo = new PageInfo<Blog>(blogs, 3);
        return pageInfo;
    }
}